package io;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲流写出时的缓冲区问题      缓冲  BufferedOutStream   和   flush  组合使用
 *
 */
public class FlushDemo {
    public static void main(String[] args) throws Exception {
        /*
        通过缓冲流写出的数据会被临时存入缓冲流内部的字节数组中
        知道数组存满数数据时才会真实写出一次
        通过缓冲输出流的flush（）方法会强制将缓冲流中已经缓冲的数据一次性写出

        flush()方法是在接口Flushable中定义的
        而字节输出的超类OutputStream实现了该接口
        这意味着所有字节输出流都具有该方法
        但是只有缓冲流真正实现了flush（）应有的功能
        其他高级流flush()方法都是调用其连接的流的flush(），将该动作传递下去

        实际应用中何时用缓冲流？
        -------------------------------------------------------？

         */

        FileOutputStream fos = new FileOutputStream("bos.txt");//不close可以输入内容
        BufferedOutputStream bos = new BufferedOutputStream(fos);//不close无法输入内容
        String line = "和我在成都的街头走一走，哦哦哦哦...";
        bos.write(line.getBytes(StandardCharsets.UTF_8));
        System.out.println("写出完毕");
//        bos.flush();//flush：冲水
        bos.close();//缓冲流close()时会自动调用一次flush()确保所有数据关闭前写出
    }

}
